<?php

/**
 * huhaiqin
 * 2024.10.11
 * 短信相关接口，使用了Common/Model/SmsModel
 */

namespace Api\Controller;
use Think\Controller;

class SmsController extends Controller{
    
    /**
     * huhaiqin,2024.10.13
     * 发送一次短信失效后获取token
     * 因为token只是一个存储在session的uuid，通过外部接口这个uuid和session实际值对不上，所以相对比较安全
     */
    public function get_sms_token(){
        // 这里建议加一个安全的判断，防止恶意调用
        $mobile = I('mobile') ? I('mobile') : _apiReturn(0,'手机号码不能为空~');
        $timestamp = I('timestamp') ? I('timestamp') : _apiReturn(0,'timestamp不能为空~');
        $current_time = time(); //服务器系统时间戳
        $diff_time = abs($current_time - $timestamp); //时间误差控制在 +- 60秒 
        if($diff_time > 60){
            _apiReturn(0,'timestamp错误~');
        }
        $sign = I('sign')? I('sign') : _apiReturn(0,'sign不能为空~');
        // 匹配sign
        $key = C('sms_key');
        $sign_str = md5($key.$timestamp.$mobile);
        if($sign != $sign_str){
            _apiReturn(0,'sign错误~');
        }
        _apiReturn(1,'success',D('Sms')->create_token(I('mobile')));
    }

    /**
     * huhaiqin,2024.10.13
     * 发送短信
     */
    public function send_sms(){
        D('Sms')->send_sms(I('mobile'),I('token'),I('type'));
    }

    /**
     * huhaiqin,2024.10.13
     * 校验验证码
     */
    public function check_sms_code(){
        $check = D('Sms')->check_code(I('mobile'),I('code'),I('type'));
        if($check == 0){
            _apiReturn(0,'验证码错误~');
        }
        if($check == -1){
            _apiReturn(0,'验证码已过期，请重新获~');
        }
        _apiReturn(1,'success'); //表示验证码正确
    }
}
